/**
 * 队列计时器
 * @param ms int 延时毫秒数
 * @param back function 延时回调
 */
$.timer = function(ms, back){
	const K='___$_timer___', ARR=[]; let TID;
	const TIMER = function(ms){
		if(TID) clearTimeout(TID);
		TID = setTimeout(()=>{
			const now=new Date()*1; let next;
			while(ARR.length){
				next=ARR[0][K]-now;
				if(next>5) break;
				ARR.shift()();
			}
			if(!ARR.length) TID=null;
			else TIMER(next);
		}, ms);
	};
	$.timer = function(ms, back){
		if(ms<1) ms=1; // 强制>=1,实际运行可能更长
		const now=new Date()*1, end=back[K]=now+ms;
		if(!ARR.length || end<ARR[0][K]){
			ARR.unshift(back);  TIMER(ms);  return;
		}
		for(const [i,v] of ARR.entries())
			if(end<v[K]) return ARR.splice(i,0,back);
		ARR.push(back); // 超出最后一个的计时时间
	};
	return $.timer(ms, back);
};
